home *** CD-ROM | disk | FTP | other *** search
/ Experimental BBS Explossion 3 / Experimental BBS Explossion III.iso / gus / vts139b.zip / DEVSPKR.PAS < prev    next >
Pascal/Delphi Source File  |  1993-04-24  |  5KB  |  184 lines

  1. {****************************************************************************}
  2. {                                                                            }
  3. { MODULE:         DevSpkr                                                    }
  4. {                                                                            }
  5. { DESCRIPTION:    Device driver for the PC internal speaker.                 }
  6. {                 It uses timer polling.                                     }
  7. {                                                                            }
  8. { AUTHOR:         Juan Carlos Arévalo                                        }
  9. {                                                                            }
  10. { MODIFICATIONS:  Nobody (yet ;-)                                            }
  11. {                                                                            }
  12. { HISTORY:        11-Nov-1992 Description                                    }
  13. {                                                                            }
  14. { (C) 1992 VangeliSTeam                                                      }
  15. {____________________________________________________________________________}
  16.  
  17. UNIT DevSpkr;
  18.  
  19. INTERFACE
  20.  
  21.  
  22.  
  23.  
  24. { Device ID String. }
  25.  
  26. CONST                    
  27.   SpkrDevID = 'Speaker';
  28.  
  29.  
  30.  
  31.  
  32. IMPLEMENTATION
  33.  
  34. USES SoundDevices, StrConst;
  35.  
  36.  
  37.  
  38.  
  39. {----------------------------------------------------------------------------}
  40. { Name function.                                                             }
  41. {____________________________________________________________________________}
  42.  
  43. FUNCTION SpkrName : TDevName; FAR;
  44.   BEGIN
  45.     SpkrName := GetString(StrDevSpkrName);
  46.   END;
  47.  
  48.  
  49.  
  50.  
  51. {----------------------------------------------------------------------------}
  52. { Autodetect routine. It's always present.                                   }
  53. {____________________________________________________________________________}
  54.  
  55. FUNCTION DevDetect : BOOLEAN; FAR;
  56.   BEGIN
  57.     DevDetect := TRUE;
  58.   END;
  59.  
  60.  
  61.  
  62.  
  63. {----------------------------------------------------------------------------}
  64. { Routine for adjusting the conversion table to the new output freq.         }
  65. {____________________________________________________________________________}
  66.  
  67. PROCEDURE AdjustTable;
  68.   CONST
  69.     i    : WORD = 0;
  70.     TVal : WORD = 0;
  71.   BEGIN
  72. (*
  73.     TVal := TimerVal SHR 1;
  74.     FOR i := 0 TO 255 DO
  75.       SpkrTabla[i] := (WORD((SpkrBaseTabla[i]-1) * TVal) DIV $39) + 1;
  76. *)
  77.   END;
  78.  
  79.  
  80.  
  81.  
  82. {----------------------------------------------------------------------------}
  83. { Device Initialisation routine.                                             }
  84. {____________________________________________________________________________}
  85.  
  86. PROCEDURE DevInit(Hz: WORD); FAR; 
  87.   BEGIN
  88.     ASM
  89.         IN      AL,61h
  90.         OR      AL,3      
  91.         OUT     61h,AL    { Turn on speaker. }
  92.  
  93.         MOV     AL,0B6h
  94.         OUT     43h,AL    
  95.  
  96.         MOV     AL,0B0h
  97.         OUT     43h,AL
  98.         MOV     AL,034h
  99.         OUT     43h,AL
  100.  
  101.         XOR     AL,AL
  102.         OUT     42h,AL
  103.         OUT     42h,AL
  104.         MOV     AL,10010000b
  105.         OUT     43h,AL    { Select Speaker timer mode. }
  106.     END;
  107.  
  108.     Stereo    := FALSE;
  109.     MixMethod := 0;
  110.     DevInitSpkr(FALSE, 8);
  111.     CalcTimerData(Hz);    { Then do the standard polling initialisation. }
  112.     InitTimer;
  113.     AdjustTable;          { And adjust the table for initial freq.       }
  114.   END;
  115.  
  116.  
  117.  
  118.  
  119. {----------------------------------------------------------------------------}
  120. { Device deinitialisation routine.                                           }
  121. {____________________________________________________________________________}
  122.  
  123. PROCEDURE DevEnd; FAR; ASSEMBLER;
  124.   ASM
  125.         IN      AL,61h
  126.         AND     AL,11111100b 
  127.         OUT     61h,AL       { Turn off speaker. }
  128.   END;
  129.  
  130.  
  131.  
  132.  
  133. {----------------------------------------------------------------------------}
  134. { Accesory routines.                                                         }
  135. {____________________________________________________________________________}
  136.  
  137. PROCEDURE DevChgHz(Hz: WORD); FAR;
  138.   BEGIN
  139.     CalcTimerData(Hz);
  140.     InitTimer;
  141.     AdjustTable;
  142.   END;
  143.  
  144. PROCEDURE DevPoll; FAR;
  145.   BEGIN
  146.   END;
  147.  
  148.  
  149.  
  150.  
  151. {----------------------------------------------------------------------------}
  152. { Device record.                                                             }
  153. {____________________________________________________________________________}
  154.  
  155. CONST
  156.   SpkrData : TSoundDevice = (
  157.     DevID      : SpkrDevID;
  158.     DMA        : FALSE
  159.   );
  160.  
  161.  
  162.  
  163.  
  164. {----------------------------------------------------------------------------}
  165. { Init code.                                                                 }
  166. {____________________________________________________________________________}
  167.  
  168. BEGIN
  169.  
  170.   WITH SpkrData DO BEGIN
  171.     Name            := SpkrName;
  172.     AutoDetect      := DevDetect;
  173.     InitRut         := DevInit;
  174.     ChgHzProc       := DevChgHz;
  175.     GetRealFreqProc := GetRealFreq;
  176.     TimerHandler    := SoundDevices.TimerHandler;
  177.     PollRut         := DevPoll;
  178.     EndRut          := DevEnd;
  179.   END;
  180.  
  181.   InitDevice(@SpkrData);
  182.  
  183. END.
  184.